package ink.ykb.redissondemo.config.lock;

/**
 * 获取锁管理类
 */
public interface DistributedLocker {

     /**
      * 锁 <br>
      * @param key  锁的名称
      * @param worker 获取锁后的处理类
      * @param <T>
      * @return 处理完具体的业务逻辑要返回的数据
      */
     <T> T tryLock(String key, AquiredLockWorker<T> worker) ;

     /**
      * 锁
      * @param <T>
      * @param key
      * @param worker
      * @param waitTime 最长获取锁的等待时间 单位秒
      * @return
      */
     <T> T tryLock(String key, AquiredLockWorker<T> worker, int waitTime);
     
     /**
      * 获取锁 <br>
      * @param key
      * @return
      */
     boolean tryLock(String key);
     
     /**
      * 获取锁
      * @param key 
      * @param waitTime 最长获取锁的等待时间  单位秒
      * @return
      */
     boolean tryLock(String key,int waitTime);
     
     /**
      * 获取锁<br>
      * 注意：获取不到锁，永久等待
      * @param key
      * @return
      */
     void lock(String key);
     
     
     /**
      * 释放锁
      * @param key
      * @return
      */
     void unLock(String key);

}